# 元组
"""
空元组：
用()定义： 元组变量名 = ()
类实例化方式定义： 元组变量名 = tuple()
非空元组：
元组变量名 = (元素1,元素2,...)
元组变量名 = 元素1,元素2,...
注意事项
元组的元素有多个时，小括号可以不写
元组只有一个元素时，写小括号，且元素后面加逗号： (元素,)
"""
# 定义空元组
info = ()
info1 = tuple()
print(info)
print(info1)
# 非空
info2 = (11, 22, 33, 44)
print(info2)
# 单个元素
# info3 = ("55") # 不加逗号此时为：<class 'str'>
info3 = ("55",)
print(type(info3)) # <class 'tuple'>
# 不写括号
info4 = 1, 2, 3, 4
print(type(info4)) # <class 'tuple'>
# 结论：
# 1. 元组的括号可以省略
# 2. 元组是一个元素值时，需要在元素后面加逗号

# 元组的使用
# 元组元素查询：索引
# 语法格式： 元组名[索引]
# 注意事项：
# 结果返回的元组元素的索引（也叫下标），默认从0开始
# 如果查询的索引不存在，则代码会报错
# 定义元组
info = (11, "aaa", 1.88)
# 查看下标为2对应元素
print(info[2]) # 1.88
# 查看下标为4对应元素
print(info[4]) # IndexError: tuple index out of range
# 总结：
# 1.如果下标存在，直接查询对应位置的元素；下标不存在直接报错

# 元组元素查询：元素统计
# 语法格式： 元组名.count(元素)
# 注意事项：
# 统计某元素出现的次数，如果元素不存在，返回0
info = (1, 2, 3, 2)
# 统计元素2出现的次数
print(info.count(2))
print(info.count(3))
print(info.count(4))

# 元组其他应用：数据交换
# 应用场景：常常用做两组数据的直接互换
# 可以直接交互原因
# Python定义多个元素的元组数据时，小括号可以省略
# Python对应元素变量可以获取元组中每个元素的值
num1 = 100
num2 = 200
# 交换两个数据
# 方式1：找第三个变量，进行互换
# tmp = num1
# num1 = num2
# num2 = tmp
# print("此时num1的值：", num1)
# print("此时num2的值：", num2)
# 方式2：直接借助于python元组类型的数据直接替换
# aa = 200 # 相当于把200给aa
# bb = 100 # 相当于把100给bb
# num1 = aa
# num2 = bb
# 合并结果 # num1, num2 = 200, 100
num1, num2 = num2, num1 # 元组元素的外层小括号可以省略
print("此时num1的值：", num1)
print("此时num2的值：", num2)

# 元组和列表区别
# 表示形式不同，元组用小括号，列表用中括号；
# 表示单个元组元素时，元素后必须加 ,
# 操作数据本质不同，元组是不可变数据类型，列表是可变数据类型

